﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Cotizav.CONEXION;
using System.Transactions;
using System.Windows.Forms;
using System.Data.Linq;

namespace Cotizav
{
    public class CtrlVendedor
    {
        private ConexionDataContext conexion;

        internal List<VENDEDOR> getListVendedor()
        {
            using (conexion = new ConexionDataContext())
            {
                DataLoadOptions dlo = new DataLoadOptions();
                dlo.LoadWith<VENDEDOR>(v => v.CARGO);
                conexion.LoadOptions = dlo;

                var query = conexion.VENDEDOR.Where(x => x.eliminado == 0);
                return query.ToList();
            }
        }

        internal DialogResult eliminarVendedor(VENDEDOR ven)
        {
            using (TransactionScope transactionscope = new TransactionScope())
            {
                DialogResult result = DialogResult.Cancel;

                using (conexion = new ConexionDataContext())
                {
                    try
                    {
                        VENDEDOR vendedor = conexion.VENDEDOR.Single(x => x.idVendedor == ven.idVendedor && x.eliminado == 0);
                        vendedor.eliminado = 1;
                        conexion.SubmitChanges();
                        transactionscope.Complete();
                        result = DialogResult.OK;

                        return result;
                    }
                    catch (Exception)
                    {
                        throw;
                    }
                }
            }
        }

        internal DialogResult registrarVendedor(VENDEDOR sell)
        {
            using (TransactionScope transactionscope = new TransactionScope())
            {
                DialogResult result = DialogResult.Cancel;
                using (conexion = new ConexionDataContext())
                {
                    try
                    {
                        int correlativoVendedor = conexion.COTIZAV_CORRELATIVO.Single(x => x.IDENTIFICADOR == "COTIZAV").VENDEDOR.Value;
                        string num = Convert.ToString(correlativoVendedor);
                        string numero = num.Trim().PadLeft(10, '0');
                        string idVendedor = "VEND_" + numero;

                        sell.idVendedor = idVendedor;
                        //insertamos
                        conexion.VENDEDOR.InsertOnSubmit(sell);
                        conexion.SubmitChanges();
                        conexion.increm_ContVendedor();

                        transactionscope.Complete();
                        result = DialogResult.OK;
                        return result;
                    }
                    catch (Exception)
                    {
                        throw;
                    }
                }

            }

        }

        internal DialogResult modificarVendedor(VENDEDOR seller)
        {
            using (TransactionScope transactionscope = new TransactionScope())
            {
                DialogResult result = DialogResult.Cancel;

                //modificamos el cliente
                using (conexion = new ConexionDataContext())
                {
                    try
                    {
                        VENDEDOR sell = conexion.VENDEDOR.Single(x => x.idVendedor == seller.idVendedor);

                        sell.nombre = seller.nombre;
                        sell.codigoEmpleado = seller.codigoEmpleado;
                        sell.email = seller.email;
                        sell.telefono = seller.telefono;
                        sell.nextel = seller.nextel;
                        sell.anexo = seller.anexo;
                        sell.celular = seller.celular;
                        sell.rpc = seller.rpc;
                        sell.rpm = seller.rpm;
                        sell.fax = seller.fax;
                        sell.idCargo = seller.idCargo;

                        conexion.SubmitChanges();

                        transactionscope.Complete();
                        result = DialogResult.OK;

                        return result;
                    }
                    catch (Exception)
                    {
                        throw;
                    }
                }
            }
        }

        internal VENDEDOR getVendedor(string idVendedor)
        {
            using (conexion = new ConexionDataContext())
            {
                try
                {
                    VENDEDOR v = conexion.VENDEDOR.SingleOrDefault(x => x.idVendedor == idVendedor && x.eliminado == 0);
                    return v;
                }
                catch (Exception)
                {
                    throw;
                }
            }
        }

        //internal List<VENDEDOR> getVendedorxCliente(string idCliente)
        //{
        //    using (conexion = new ConexionDataContext())
        //    {
        //        try
        //        {
        //            List<VENDEDOR> result = new List<VENDEDOR>();
        //            var query = conexion.CLIENTEXVENDEDOR.Where(x => x.idCliente == idCliente);

        //            foreach (var c in query)
        //            {
        //                VENDEDOR vend = this.getVendedor(c.idVendedor);
        //                result.Add(vend);
        //            }

        //            return result;
        //        }
        //        catch (Exception)
        //        {                    
        //            throw;
        //        }
        //    }
        //}

        internal List<VENDEDOR> buscarVendedorExacto(string columna, string value)
        {
            using (conexion = new ConexionDataContext())
            {
                List<VENDEDOR> result = new List<VENDEDOR>();

                try
                {
                    DataLoadOptions dlo = new DataLoadOptions();
                    dlo.LoadWith<VENDEDOR>(c => c.CARGO);
                    conexion.LoadOptions = dlo;

                    if (!string.IsNullOrWhiteSpace(value))
                    {
                        switch (columna)
                        {
                            case "nombre":
                                result = conexion.VENDEDOR.Where(x => x.nombre == value).OrderBy(x => x.nombre).ToList();
                                break;
                            case "codigoEmpleado":
                                result = conexion.VENDEDOR.Where(x => x.codigoEmpleado == value).OrderBy(x => x.codigoEmpleado).ToList();
                                break;
                        }
                    }

                    return result;
                }
                catch (Exception)
                {
                    throw;
                }
            }
        }
    }
}
